/**
 * 封装 Storage 工具类 Cache
 * 可以选择 localStorage 或者 sessionStorage
 *
 * localStorage 和 sessionStorage 的区别
 *  localStorage 设置的数据会永久保存在浏览器中
 *  sessionStorage 设置的数据会在网页窗口被关闭后自动销毁
 */

// 枚举类型
enum CacheType {
  Local,
  Session
}

class Cache {
  storage: Storage

  constructor(type: CacheType) {
    this.storage = type === CacheType.Local ? localStorage : sessionStorage
  }

  // 设置数据
  setCache(key: string, value: any) {
    if (value) {
      this.storage.setItem(key, JSON.stringify(value))
    }
  }

  // 获取数据
  getCache(key: string) {
    const value = this.storage.getItem(key)
    if (value) {
      return JSON.parse(value)
    }
  }

  // 移除指定数据
  removeCache(key: string) {
    this.storage.removeItem(key)
  }

  // 清空所有数据
  clearCache() {
    this.storage.clear()
  }
}

const localCache = new Cache(CacheType.Local)
const sessionCache = new Cache(CacheType.Session)

export { localCache, sessionCache }
